InitBasinAverage Subroutine

public subroutine InitBasinAverage(fileini, pathout, temp, tmean, tmax, tmin, precipitation, rh, radiation, netradiation, windspeed, daily_precipitation, irrigation, swe, sm, runoff, infiltration, percolation, et, pet, dsm, snowmelt, iwe, icemelt)

Initialization of basin average

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: fileini
character(len=*), intent(in) :: pathout
type(grid_real), intent(in) :: temp

air temperarure (°C)

type(grid_real), intent(in) :: tmean

air temperarure daily mean(°C)

type(grid_real), intent(in) :: tmax

air temperarure daily max (°C)

type(grid_real), intent(in) :: tmin

air temperarure daily min (°C)

type(grid_real), intent(in) :: precipitation

precipitation rate (m/s)

type(grid_real), intent(in) :: rh

air relative humidity (0-100)

type(grid_real), intent(in) :: radiation

solar radiation (w/m2)

type(grid_real), intent(in) :: netradiation

net radiation (w/m2)

type(grid_real), intent(in) :: windspeed

wind speed (m/s)

type(grid_real), intent(in) :: daily_precipitation

daily precipitation rate (m/s)

type(grid_real), intent(in) :: irrigation

irrigation rate (m/s)

type(grid_real), intent(in) :: swe

snow water equivalent (m)

type(grid_real), intent(in) :: sm

soil mositure (-)

type(grid_real), intent(in) :: runoff

runoff (m/s)

type(grid_real), intent(in) :: infiltration

infiltration (m/s)

type(grid_real), intent(in) :: percolation

deep percolation (m/s)

type(grid_real), intent(in) :: et

actual evapotranspiration (m/s)

type(grid_real), intent(in) :: pet

potential evapotranspiration (m/s)

type(grid_real), intent(in) :: dsm

soil moisture variation (m)

type(grid_real), intent(in) :: snowmelt

snow melt (m)

type(grid_real), intent(in) :: iwe

ice water equivalent (m)

type(grid_real), intent(in) :: icemelt

ice melt (m)


Variables

Type Visibility Attributes Name Initial
type(IniList), public :: iniDB
character(len=300), public :: string

Source Code

SUBROUTINE InitBasinAverage   & 
!
 (fileini, pathout, temp, tmean, tmax, tmin, precipitation, &
  rh, radiation, netradiation, windspeed, daily_precipitation, &
  irrigation, swe, sm, runoff, infiltration, percolation, et, &
  pet, dsm, snowmelt, iwe, icemelt  )  

IMPLICIT NONE

!arguments with intent in:
CHARACTER(LEN = *), INTENT(IN)    :: fileini 
CHARACTER(LEN = *), INTENT(IN)    :: pathout   
TYPE (grid_real), INTENT(IN) :: temp !!air temperarure (°C)
TYPE (grid_real), INTENT(IN) :: tmean !!air temperarure daily mean(°C)
TYPE (grid_real), INTENT(IN) :: tmax !!air temperarure daily max (°C)
TYPE (grid_real), INTENT(IN) :: tmin !!air temperarure daily min (°C)
TYPE (grid_real), INTENT(IN) :: precipitation !!precipitation rate (m/s)
TYPE (grid_real), INTENT(IN) :: rh !!air relative humidity (0-100)
TYPE (grid_real), INTENT(IN) :: radiation !!solar radiation (w/m2)
TYPE (grid_real), INTENT(IN) :: netradiation !!net radiation (w/m2)
TYPE (grid_real), INTENT(IN) :: windspeed !!wind speed (m/s)
TYPE (grid_real), INTENT(IN) :: daily_precipitation !!daily precipitation rate (m/s)
TYPE (grid_real), INTENT(IN) :: irrigation !!irrigation rate (m/s)
TYPE (grid_real), INTENT(IN) :: swe !!snow water equivalent (m)
TYPE (grid_real), INTENT(IN) :: sm !!soil mositure (-)
TYPE (grid_real), INTENT(IN) :: runoff !!runoff (m/s)
TYPE (grid_real), INTENT(IN) :: infiltration !!infiltration (m/s)
TYPE (grid_real), INTENT(IN) :: percolation !!deep percolation (m/s)
TYPE (grid_real), INTENT(IN) :: et !!actual evapotranspiration (m/s)
TYPE (grid_real), INTENT(IN) :: pet !!potential evapotranspiration (m/s)
TYPE (grid_real), INTENT(IN) :: dsm !!soil moisture variation (m)
TYPE (grid_real), INTENT(IN) :: snowmelt !! snow melt (m)
TYPE (grid_real), INTENT(IN) :: iwe !! ice water equivalent (m)
TYPE (grid_real), INTENT(IN) :: icemelt !! ice melt (m)

 

!local declarations
TYPE(IniList)          :: iniDB
CHARACTER (LEN = 300)  :: string
!-------------------------------end of declaration-----------------------------


!Check morphological properties are available

IF ( .NOT. flowDirection_loaded ) THEN
    CALL Catch ('error', 'BasinAverage', 'flow direction missing, &
                                  check morphological properties')
END IF

IF ( .NOT. flowAccumulation_loaded ) THEN
    CALL Catch ('error', 'BasinAverage', 'flow accumulation missing, &
                                  check morphological properties')
END IF

IF ( .NOT. streamNetworkCreated ) THEN
    CALL Catch ('error', 'BasinAverage', 'stream network missing, &
                                  check morphological properties')
END IF

!  open and read configuration file
CALL IniOpen (fileini, iniDB) 

!create and export basin raster maps
IF (KeyIsPresent ('raster-export', iniDB) ) THEN
    IF ( IniReadInt ('raster-export', iniDB)  == 1 ) THEN
        CALL BasinRasterExport ( pathout )
    END IF
END IF


! search for active variable for output
CALL Catch ('info', 'BasinAverage', 'checking for active variables ')

countVar = 0
!precipitation
IF ( IniReadInt ('precipitation', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (precipitation % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', 'precipitation not allocated, &
                                        forced to not export basin average ')
       varOut (1) = .FALSE.
   ELSE
       varOut (1) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesPrecipitation )
       fileUnitPrecipitation = GetUnit ()
       string = TRIM(pathout) // 'mean_precipitation.fts'
       OPEN ( unit = fileUnitPrecipitation, file = string )
       sitesPrecipitation % description = 'average precipitation'
       sitesPrecipitation % unit = 'mm'
       sitesPrecipitation % offsetZ = 0.
       CALL WriteMetadata ( network = sitesPrecipitation, &
                        fileunit = fileUnitPrecipitation )
       CALL WriteData (sitesPrecipitation, fileUnitPrecipitation, .TRUE.) 
       
   END IF
ELSE
   varOut (1) = .FALSE.
END IF

!daily-precipitation
IF ( IniReadInt ('daily-precipitation', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (daily_precipitation % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', &
                   'daily_precipitation not allocated, &
                    forced to not export basin average ')
       varOut (2) = .FALSE.
   ELSE
       varOut (2) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesPrecipitationDaily )
       fileUnitPrecipitationDaily = GetUnit ()
       string = TRIM(pathout) // 'mean_pdaily.fts'
       OPEN ( unit = fileUnitPrecipitationDaily, file = string )
       sitesPrecipitationDaily % description = 'daily precipitation'
       sitesPrecipitationDaily % unit = 'mm'
       sitesPrecipitationDaily % offsetZ = 0.
       CALL WriteMetadata ( network = sitesPrecipitationDaily, &
                        fileunit = fileUnitPrecipitationDaily )
       CALL WriteData (sitesPrecipitationDaily, &
                       fileUnitPrecipitationDaily, .TRUE.) 
   END IF
ELSE
   varOut (2) = .FALSE.
END IF

!air-temperature
IF ( IniReadInt ('temperature', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (temp % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', &
                   'air temperature not allocated, &
                   forced to not export basin average ')
       varOut (3) = .FALSE.
   ELSE
       varOut (3) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesTemp )
       fileUnitTemp = GetUnit ()
       string = TRIM(pathout) // 'mean_temperature.fts'
       OPEN ( unit = fileUnitTemp, file = string )
       sitesTemp % description = 'air temperature'
       sitesTemp % unit = 'Degree Celsius'
       sitesTemp % offsetZ = 0.
       CALL WriteMetadata ( network = sitesTemp, &
                        fileunit = fileUnitTemp )
       CALL WriteData (sitesTemp, fileUnitTemp, .TRUE.)
   END IF
ELSE
   varOut (3) = .FALSE.
END IF

!temperature-daily-mean
IF ( IniReadInt ('temperature-daily-mean', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (tmean % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', &
                   'mean daily air temperature not allocated, &
                    forced to not export basin average ')
       varOut (4) = .FALSE.
   ELSE
       varOut (4) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesTmean )
       fileUnitTmean = GetUnit ()
       string = TRIM(pathout) // 'mean_tmean.fts'
       OPEN ( unit = fileUnitTmean, file = string )
       sitesTmean % description = 'mean daily air temperature'
       sitesTmean % unit = 'Degree Celsius'
       sitesTmean % offsetZ = 0.
       CALL WriteMetadata ( network = sitesTmean, &
                        fileunit = fileUnitTmean )
       CALL WriteData (sitesTmean, fileUnitTmean, .TRUE.)
   END IF
ELSE
   varOut (4) = .FALSE.
END IF

!air-temperature-daily-max
IF ( IniReadInt ('temperature-daily-max', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (tmax % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', &
                   'max daily air temperature not allocated, &
                    forced to not export basin average ')
       varOut (5) = .FALSE.
   ELSE
       varOut (5) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesTmax )
       fileUnitTmax = GetUnit ()
       string = TRIM(pathout) // 'mean_tmax.fts'
       OPEN ( unit = fileUnitTmax, file = string )
       sitesTmean % description = 'maximum daily air temperature'
       sitesTmean % unit = 'Degree Celsius'
       sitesTmean % offsetZ = 0.
       CALL WriteMetadata ( network = sitesTmax, &
                        fileunit = fileUnitTmax )
       CALL WriteData (sitesTmax, fileUnitTmax, .TRUE.)
   END IF
ELSE
   varOut (5) = .FALSE.
END IF


!air-temperature-daily-min
IF ( IniReadInt ('temperature-daily-min', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (tmin % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', &
                   'min daily air temperature not allocated, &
                    forced to not export basin average ')
       varOut (6) = .FALSE.
   ELSE
       varOut (6) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesTmin )
       fileUnitTmin = GetUnit ()
       string = TRIM(pathout) // 'mean_tmin.fts'
       OPEN ( unit = fileUnitTmin, file = string )
       sitesTmin % description = 'minimum daily air temperature'
       sitesTmean % unit = 'Degree Celsius'
       sitesTmean % offsetZ = 0.
       CALL WriteMetadata ( network = sitesTmin, &
                        fileunit = fileUnitTmin )
       CALL WriteData (sitesTmin, fileUnitTmin, .TRUE.)
   END IF
ELSE
   varOut (6) = .FALSE.
END IF


!relative-humidity
IF ( IniReadInt ('relative-humidity', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (rh % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', &
                   'relative humidity not allocated, &
                    forced to not export basin average ')
       varOut (7) = .FALSE.
   ELSE
       varOut (7) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesRH )
       fileUnitRH = GetUnit ()
       string = TRIM(pathout) // 'mean_rh.fts'
       OPEN ( unit = fileUnitRH, file = string )
       sitesRH % description = 'mean air relative humidity'
       sitesRH % unit = '% 0-100'
       sitesRH % offsetZ = 0.
       CALL WriteMetadata ( network = sitesRH, &
                        fileunit = fileUnitRH )
       CALL WriteData (sitesRH, fileUnitRH, .TRUE.)
   END IF
ELSE
   varOut (7) = .FALSE.
END IF

!solar-radiation
IF ( IniReadInt ('solar-radiation', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (radiation % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', &
                   'solar radiation not allocated, &
                    forced to not export basin average ')
       varOut (8) = .FALSE.
   ELSE
       varOut (8) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesRadiation )
       fileUnitRadiation = GetUnit ()
       string = TRIM(pathout) // 'mean_rad.fts'
       OPEN ( unit = fileUnitRadiation, file = string )
       sitesRadiation % description = 'mean solar radiation'
       sitesRadiation % unit = 'w/m2'
       sitesRadiation % offsetZ = 0.
       CALL WriteMetadata ( network = sitesRadiation, &
                        fileunit = fileUnitRadiation )
       CALL WriteData (sitesRadiation, fileUnitRadiation, .TRUE.)
   END IF
ELSE
   varOut (8) = .FALSE.
END IF

!net-radiation
IF ( IniReadInt ('net-radiation', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (netradiation % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', 'net radiation not allocated, &
                                        forced to not export basin average ')
       varOut (9) = .FALSE.
   ELSE
       varOut (9) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesNetRadiation )
       fileUnitNetRadiation = GetUnit ()
       string = TRIM(pathout) // 'mean_netrad.fts'
       OPEN ( unit = fileUnitNetRadiation, file = string )
       sitesNetRadiation % description = 'mean net radiation'
       sitesNetRadiation % unit = 'w/m2'
       sitesNetRadiation % offsetZ = 0.
       CALL WriteMetadata ( network = sitesNetRadiation, &
                        fileunit = fileUnitNetRadiation )
       CALL WriteData (sitesNetRadiation, fileUnitNetRadiation, .TRUE.)
   END IF
ELSE
   varOut (9) = .FALSE.
END IF

!wind-speed
IF ( IniReadInt ('wind-speed', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (windspeed % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', 'wind speed not allocated, &
                                        forced to not export basin average ')
       varOut (10) = .FALSE.
   ELSE
       varOut (10) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesWindSpeed )
       fileUnitWindSpeed = GetUnit ()
       string = TRIM(pathout) // 'mean_windspeed.fts'
       OPEN ( unit = fileUnitWindSpeed, file = string )
       sitesWindSpeed % description = 'mean wind speed'
       sitesWindSpeed % unit = 'm/s'
       sitesWindSpeed % offsetZ = 0.
       CALL WriteMetadata ( network = sitesWindSpeed, &
                        fileunit = fileUnitWindSpeed )
       CALL WriteData (sitesWindSpeed, fileUnitWindSpeed, .TRUE.)
   END IF
ELSE
   varOut (10) = .FALSE.
END IF

!irrigation
IF ( IniReadInt ('irrigation', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (irrigation % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', 'irrigation not allocated, &
                                        forced to not export basin average ')
       varOut (11) = .FALSE.
   ELSE
       varOut (11) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesIrrigation )
       fileUnitIrrigation = GetUnit ()
       string = TRIM(pathout) // 'mean_irrigation.fts'
       OPEN ( unit = fileUnitIrrigation, file = string )
       sitesIrrigation % description = 'mean irrigation'
       sitesIrrigation % unit = 'mm'
       sitesIrrigation % offsetZ = 0.
       CALL WriteMetadata ( network = sitesIrrigation, &
                        fileunit = fileUnitIrrigation )
       CALL WriteData (sitesIrrigation, fileUnitIrrigation, .TRUE.)
   END IF
ELSE
   varOut (11) = .FALSE.
END IF

!snow water equivalent
IF ( IniReadInt ('snow-water-equivalent', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (swe % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', 'SWE not allocated, &
                                        forced to not export basin average ')
       varOut (12) = .FALSE.
   ELSE
       varOut (12) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesSWE )
       fileUnitSWE = GetUnit ()
       string = TRIM(pathout) // 'mean_swe.fts'
       OPEN ( unit = fileUnitSWE, file = string )
       sitesSWE % description = 'mean snow water equivalent'
       sitesSWE % unit = 'mm'
       sitesSWE % offsetZ = 0.
       CALL WriteMetadata ( network = sitesSWE, &
                        fileunit = fileUnitSWE )
       CALL WriteData (sitesSWE, fileUnitSWE, .TRUE.)
   END IF
ELSE
   varOut (12) = .FALSE.
END IF

!soil moisture
IF ( IniReadInt ('soil-moisture', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (sm % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', 'soil-moisture not allocated, &
                                        forced to not export basin average ')
       varOut (13) = .FALSE.
   ELSE
       varOut (13) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesSM )
       fileUnitSM = GetUnit ()
       string = TRIM(pathout) // 'mean_soil-moisture.fts'
       OPEN ( unit = fileUnitSM, file = string )
       sitesSM % description = 'mean soil moisture'
       sitesSM % unit = 'm3/m3'
       sitesSM % offsetZ = 0.
       CALL WriteMetadata ( network = sitesSM, &
                        fileunit = fileUnitSM )
       CALL WriteData (sitesSM, fileUnitSM, .TRUE.)
   END IF
ELSE
   varOut (13) = .FALSE.
END IF

!runoff
IF ( IniReadInt ('runoff', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (runoff % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', 'runoff not allocated, &
                                        forced to not export basin average ')
       varOut (14) = .FALSE.
   ELSE
       varOut (14) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesRunoff )
       fileUnitRunoff = GetUnit ()
       string = TRIM(pathout) // 'mean_runoff.fts'
       OPEN ( unit = fileUnitRunoff, file = string )
       sitesRunoff % description = 'mean runoff'
       sitesRunoff % unit = 'mm'
       sitesRunoff % offsetZ = 0.
       CALL WriteMetadata ( network = sitesRunoff, &
                        fileunit = fileUnitRunoff )
       CALL WriteData (sitesRunoff, fileUnitRunoff, .TRUE.)
   END IF
ELSE
   varOut (14) = .FALSE.
END IF


!infiltration
IF ( IniReadInt ('infiltration', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (infiltration % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', 'infiltration not allocated, &
                                        forced to not export basin average ')
       varOut (15) = .FALSE.
   ELSE
       varOut (15) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesInfiltration )
       fileUnitInfiltration = GetUnit ()
       string = TRIM(pathout) // 'mean_infiltration.fts'
       OPEN ( unit = fileUnitInfiltration, file = string )
       sitesInfiltration % description = 'mean infiltration'
       sitesInfiltration % unit = 'mm'
       sitesInfiltration % offsetZ = 0.
       CALL WriteMetadata ( network = sitesInfiltration, &
                        fileunit = fileUnitInfiltration )
       CALL WriteData (sitesInfiltration, fileUnitInfiltration, .TRUE.)
   END IF
ELSE
   varOut (15) = .FALSE.
END IF


!percolation
IF ( IniReadInt ('percolation', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (percolation % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', 'percolation not allocated, &
                                        forced to not export basin average ')
       varOut (16) = .FALSE.
   ELSE
       varOut (16) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesPercolation )
       fileUnitPercolation = GetUnit ()
       string = TRIM(pathout) // 'mean_percolation.fts'
       OPEN ( unit = fileUnitPercolation, file = string )
       sitesPercolation % description = 'mean percolation'
       sitesPercolation % unit = 'mm'
       sitesPercolation % offsetZ = 0.
       CALL WriteMetadata ( network = sitesPercolation, &
                        fileunit = fileUnitPercolation )
       CALL WriteData (sitesPercolation, fileUnitPercolation, .TRUE.)
   END IF
ELSE
   varOut (16) = .FALSE.
END IF

!actual evapotranspiration
IF ( IniReadInt ('actual-ET', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (et % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', 'et not allocated, &
                                        forced to not export basin average ')
       varOut (17) = .FALSE.
   ELSE
       varOut (17) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesET )
       fileUnitET = GetUnit ()
       string = TRIM(pathout) // 'mean_et.fts'
       OPEN ( unit = fileUnitET, file = string )
       sitesET % description = 'mean actual evapotranspiration'
       sitesET % unit = 'mm'
       sitesET % offsetZ = 0.
       CALL WriteMetadata ( network = sitesET, &
                        fileunit = fileUnitET )
       CALL WriteData (sitesET, fileUnitET, .TRUE.)
   END IF
ELSE
   varOut (17) = .FALSE.
END IF


!potential evapotranspiration
IF ( IniReadInt ('potential-ET', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (pet % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', 'pet not allocated, &
                                        forced to not export basin average ')
       varOut (18) = .FALSE.
   ELSE
       varOut (18) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesPET )
       fileUnitPET = GetUnit ()
       string = TRIM(pathout) // 'mean_pet.fts'
       OPEN ( unit = fileUnitPET, file = string )
       sitesPET % description = 'mean potential evapotranspiration'
       sitesPET % unit = 'mm'
       sitesPET % offsetZ = 0.
       CALL WriteMetadata ( network = sitesPET, &
                        fileunit = fileUnitPET )
       CALL WriteData (sitesPET, fileUnitPET, .TRUE.)
   END IF
ELSE
   varOut (18) = .FALSE.
END IF

!soil moisture variation (soil water storage variation)
IF ( IniReadInt ('delta-soil-moisture', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (dsm % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', 'delta-soil-moisture not allocated, &
                                        forced to not export basin average ')
       varOut (19) = .FALSE.
   ELSE
       varOut (19) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesDSM )
       fileUnitDSM = GetUnit ()
       string = TRIM(pathout) // 'mean_delta-soil-moisture.fts'
       OPEN ( unit = fileUnitDSM, file = string )
       sitesDSM % description = 'mean soil water storage variation'
       sitesDSM % unit = 'mm'
       sitesDSM % offsetZ = 0.
       CALL WriteMetadata ( network = sitesDSM, &
                        fileunit = fileUnitDSM )
       CALL WriteData (sitesDSM, fileUnitDSM, .TRUE.)
   END IF
ELSE
   varOut (19) = .FALSE.
END IF

!snow melt
IF ( IniReadInt ('snow-melt', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (snowmelt % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', 'snow-melt not allocated, &
                                        forced to not export basin average ')
       varOut (20) = .FALSE.
   ELSE
       varOut (20) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesSnowMelt )
       fileUnitSnowMelt = GetUnit ()
       string = TRIM(pathout) // 'mean_snow-melt.fts'
       OPEN ( unit = fileUnitSnowMelt, file = string )
       sitesSnowMelt % description = 'mean snow melt'
       sitesSnowMelt % unit = 'mm'
       sitesSnowMelt % offsetZ = 0.
       CALL WriteMetadata ( network = sitesSnowMelt, &
                        fileunit = fileUnitSnowMelt )
       CALL WriteData (sitesSnowMelt, fileUnitSnowMelt, .TRUE.)
   END IF
ELSE
   varOut (20) = .FALSE.
END IF


!ice water equivalent
IF ( IniReadInt ('ice-water-equivalent', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (iwe % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', 'ice-water-equivalent not allocated, &
                                        forced to not export basin average ')
       varOut (21) = .FALSE.
   ELSE
       varOut (21) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesIWE )
       fileUnitIWE = GetUnit ()
       string = TRIM(pathout) // 'mean_icewe.fts'
       OPEN ( unit = fileUnitIWE, file = string )
       sitesIWE % description = 'mean ice water equivalent'
       sitesIWE % unit = 'mm'
       sitesIWE % offsetZ = 0.
       CALL WriteMetadata ( network = sitesIWE, &
                        fileunit = fileUnitIWE )
       CALL WriteData (sitesIWE, fileUnitIWE, .TRUE.)
   END IF
ELSE
   varOut (21) = .FALSE.
END IF


!ice melt
IF ( IniReadInt ('ice-melt', iniDB ) == 1) THEN
   IF ( .NOT. ALLOCATED (icemelt % mat) ) THEN
       CALL Catch ('warning', 'BasinAverage', 'ice-melt not allocated, &
                                        forced to not export basin average ')
       varOut (22) = .FALSE.
   ELSE
       varOut (22) = .TRUE.
       countVar = countVar + 1
       CALL CopyNetwork ( sites, sitesIceMelt )
       fileUnitIceMelt = GetUnit ()
       string = TRIM(pathout) // 'mean_ice-melt.fts'
       OPEN ( unit = fileUnitIceMelt, file = string )
       sitesIceMelt % description = 'mean icemelt'
       sitesIceMelt % unit = 'mm'
       sitesIceMelt % offsetZ = 0.
       CALL WriteMetadata ( network = sitesIceMelt, &
                        fileunit = fileUnitIceMelt )
       CALL WriteData (sitesIceMelt, fileUnitIceMelt, .TRUE.)
   END IF
ELSE
   varOut (22) = .FALSE.
END IF





CALL IniClose (iniDB) 

!create grid to cumulate variable
IF ( countVar > 0 ) THEN
    CALL NewGrid (cum, mask)
END IF


RETURN
END SUBROUTINE InitBasinAverage